It is often difficult to determine the root cause of an error in complex multilayered software. In some situations, upper layers of software abstract the details of the errors caused by lower layers and present a more user-friendly output to the person using the software. This abstraction of failures makes diagnosing the exact cause of the error difficult.
One of the technologies that can be used to counteract this loss of information due to abstraction of errors is tracing. Optional trace statements (for example, calls to the application programming interface (API) of a tracing tool) are embedded in the code to record the error at each layer in the software, thus creating a trace of the errors across the cross-section of the multilayered software. This trace may be used to better understand the error and to rapidly determine the root cause.
However, if an error occurs in a portion of the software which lacks trace statements, the root cause of the error may not be clear to the person analyzing the problem.